package com.boe.server.register.util;

import com.boe.server.register.config.JWTConfig;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;
import org.springframework.stereotype.Component;

import java.util.Date;
import java.util.Map;

/**
 * jwt工具类
 */
@Component
public class JWTTokenUtil {

    private final JWTConfig jwtConfig;

    public JWTTokenUtil(JWTConfig jwtConfig) {
        this.jwtConfig = jwtConfig;
    }

    /**
     * 生成Token
     *
     * @param id 用户安全实体
     * @return Token
     * @author uaniheng
     * @CreateTime 2019/10/2 12:16
     */
    public String createAccessToken(String id, String subject, Map<String, Object> claims) {

        // 登陆成功生成JWT
        return Jwts.builder()
                // 放入用户名和用户ID
                .setId(id)
                // 主题
                .setSubject(subject)
                // 签发时间
                .setIssuedAt(new Date())
                // 签发者
                .setIssuer(jwtConfig.getIssuer())
                // 自定义属性 放入用户拥有权限
                .addClaims(claims)
                // 失效时间
                .setExpiration(new Date(System.currentTimeMillis() + jwtConfig.getExpiration() * 1000))
                // 签名算法和密钥
                .signWith(SignatureAlgorithm.HS512, jwtConfig.getSecret())
                .compact();
    }
}